<?php

namespace App\Repository\Sys;

/**
 *
 * 字符串操作函数
 * laravel 自带有一些字符串和数组操作函数
 * 使用\Illuminate\Support\Str::xxx() 操作字符串
 * 或者\Illuminate\Support\Arr::xxx()  操作数组
 *
 * Class Str
 * @package App\Repository\Sys
 */
class Str extends \Illuminate\Support\Str
{

    //字符串时间转换成完整的时间戳 如9:00
    static public function timeTotime($time_str,$day_now=false)
    {
        if($day_now){
            return strtotime(date('Y-m-d')." {$time_str}:00");
        }else{

            $time=explode(':',$time_str);

            $time[0]=(int)$time[0];
//            var_dump($time);
            if($time[0]>=0 and $time[0]<4 ){  //判断是否是第二天
                return strtotime("1970-01-02 {$time_str}:00");
            }else{
                return strtotime("1970-01-01 {$time_str}:00");
            }

        }
    }

    static public function getTypeText($v)
    {
        return "{$v}V{$v}";
    }

    static public function getWeek($day_int)
    {
        $weekarray = array("日", "一", "二", "三", "四", "五", "六");
        return $weekarray[date("w", $day_int)];

    }

    //自动拼接完整url
    static public function getImg($imgurl)
    {
        return $imgurl ? ((strpos($imgurl, '/') === 0) ? \Config::get('app.img_url') . $imgurl : $imgurl) : '';
    }

    static public function toUTF8($str)
    {
        return mb_convert_encoding($str, 'UTF-8', 'GBK'); //编码转换为utf-8
    }

    static public function toGBK($str)
    {
        return mb_convert_encoding($str, 'GBK', 'UTF-8'); //编码转换为gbk
    }


    static public function emptyStrToNull($data)
    {
        if (is_array($data)) {
            foreach ($data as $k => $v) {
                if ($v === '') {
                    $data[$k] = null;
                }
            }
        } else {
            if ($data === '') {
                $data = null;
            }
        }
        return $data;
    }

    //逗号字符串分割成数组
    static public function explodeToArray($str)
    {
        if ($str === '' or $str === null) {
            return [];
        } else {
            $str = trim($str, ',');
            if ($str) {
                return explode(',', $str);
            } else {
                return [];
            }
        }
    }

    //数组使用逗号拼接
    static public function implodeToStr($arr)
    {
        if (!$arr or empty($arr)) {
            return '';
        } else {
            return implode(',', $arr);
        }
    }

    static public function isWindows()
    {
        if (PATH_SEPARATOR == ':') {
            //linux
            return false;
        } else {
            return true;
        }
    }

    /**
     * 字符串截取，支持中文和其他编码
     * @static
     * @access public
     * @param string $str 需要转换的字符串
     * @param string $start 开始位置
     * @param string $length 截取长度
     * @param string $charset 编码格式
     * @param string $suffix 截断显示字符
     * @return string
     */
    public static function msubstr($str, $start = 0, $length, $charset = "utf-8", $suffix = true)
    {
        if (function_exists("mb_substr"))
            $slice = mb_substr($str, $start, $length, $charset);
        elseif (function_exists('iconv_substr')) {
            $slice = iconv_substr($str, $start, $length, $charset);
            if (false === $slice) {
                $slice = '';
            }
        } else {
            $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
            $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
            $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
            $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
            preg_match_all($re[$charset], $str, $match);
            $slice = join("", array_slice($match[0], $start, $length));
        }
        return $suffix ? $slice . '...' : $slice;
    }

    //创建随机字符串
    static public function generatePassword($length = 8)
    {
        // 密码字符集，可任意添加你需要的字符
        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

        $password = '';
        for ($i = 0; $i < $length; $i++) {
            // 这里提供两种字符获取方式
            // 第一种是使用 substr 截取$chars中的任意一位字符；
            // 第二种是取字符数组 $chars 的任意元素
            $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
//            $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
        }
        return $password;
    }

    /**
     * 格式化输出目标日期字符串
     * @param $format       期望格式 如Y-m  Y-m-d
     * @param $timeStr      当前格式的日期字符串    如m/d/Y
     * @return              格式化之后的字符串
     * 注：
     *     兼容规则同 strtotime
     *     $time  = '2017-01-7 12:19:1'         //年月日 时分秒   0可以忽略
     *     $time2 = '2017-01-01';               //年月日   兼容
     *     $time3 = '2017年1月5日';             //不兼容
     *     $time4 = '01/02/2000';               //月日年   兼容
     *     $time5 = '01-02-2000';               //日月年   兼容
     */
    static public function dateFormat($format, $timeStr, $web_format = '')
    {
        if ($timeStr == '0000-00-00 00:00:00') {
            return '';
        }
        if ($web_format) {
            if (Sys::isAdminApi()) {  //返回后台的格式
                return date($format, strtotime(trim($timeStr)));
            } else {
                return date($web_format, strtotime(trim($timeStr)));  //返回前台的格式
            }
        }
        return date($format, strtotime(trim($timeStr)));
    }

    static public function getAge($birth)
    {
        $now=time();
        // $birth = strtotime(trim($birth));
        $age = ((int)$now - (int)$birth) / 31536000;

        return (int)$age;
    }

    //获取当前格式化的时候
    static public function getNowDateTime()
    {
        return date('Y-m-d H:i:s');
    }

    //返回当前的 整点时间 或格式化成整点时间
    static public function getDayTime($day_str = '')
    {
        if ($day_str) {
            return strtotime($day_str);
        } else {
            return strtotime(date('Y-m-d 00:00:00'));
        }
    }


    //获取当前url不带参数
    static public function getUrlPath($url = '')
    {
        if (!$url) {
            $url = $_SERVER['REQUEST_URI'];
        }
        $tp = strpos($url, '?');
        if ($tp === false) {
            return $url;
        } else {
            $strlen = strlen($url);
            return substr($url, -$strlen, $tp);
        }
    }

    static public function time_tran($the_time)
    {
        $now_time = date("Y-m-d H:i:s", time() + 8 * 60 * 60);
        $now_time = strtotime($now_time);
        $show_time = strtotime($the_time);
        $dur = $now_time - $show_time;
        if ($dur < 0) {
            return $the_time;
        } else {
            if ($dur < 60) {
                return $dur . '秒前';
            } else {
                if ($dur < 3600) {
                    return floor($dur / 60) . '分钟前';
                } else {
                    if ($dur < 86400) {
                        return floor($dur / 3600) . '小时前';
                    } else {
                        if ($dur < 259200) {//3天内
                            return floor($dur / 86400) . '天前';
                        } else {
                            return self::dateFormat('m/d', $the_time);
//                            return $the_time;
                        }
                    }
                }

            }
        }
    }


}